After a soft crash, (a system failure in which stable storage is unaffected), a database is generally recovered to the last committed transaction and uncommitted or incomplete transactions are aborted. Although database state is recovered, the state of an application using the database, and its session, are typically lost.
U.S. Pat. No. 6,182,086 “Client-Server Computer System with Application Recovery of Server Applications and Client Applications” issued Jan. 20, 2001, describes a technique in which a stable log file is generated that is used to help recover a client-side application when a system crash occurs. U.S. patent application Ser. No. 09/946,050 “Recovery Guarantees for General Multi-Tier Applications”, filed Sep. 1, 2001 and U.S. patent application Ser. No. 09/946,092 “Persistent Stateful Component-Based Applications Via Automatic Recovery”, filed Sep. 1, 2001, describe other techniques for recovering an application after a system crash. For example, a stateless application may be broken into steps, each step executing within a transaction. Applications with state (stateful applications) can be recovered by intercepting interactions between components and stably logging them. In prior techniques implementing this approach, a client interacting with a number of servers: server 1, server 2 . . . server n, logs a message returned by server 1 (in a memory buffer, for instance) and forces the log (writes the memory buffer to stable storage) before sending a message to server 2 in order to capture all non-determinism encountered up to that point.
The overhead involved in all these techniques for recovering applications is relatively high. It would be helpful if there were an optimized recovery technique that would reduce the number of forced log writes required.